// 设置 a 的类型为 unknown
let a: unknown

// 以下对 a 的赋值, 均正常
a = 99
a = false
a = 'hello'

// 设置 x 的数据类型为 string
let x: string
// x = a // 不能将类型“unknown”分配给类型“string”。

a = 'hello'
// x = a // 不能赋值

// 第一种 判断
if (typeof a === 'string') {
  x = a // 添加判断可以赋值
}

// 第二种 断言
x = a as string

// 第三种 断言
x = <string>a

let str1: string
str1 = 'hello'
str1.toUpperCase()  // 无警告

let str2: any
str2 = 'hello'
str2.toUpperCase()  // 无警告

let str3: unknown
str3 = 'hello';
// str3.toUpperCase()  // 警告: “str3”的类型为“未知”。

// 使用断言强制制定 str3 的类型为 string 
(str3 as string).toUpperCase()  // 无警告